/*
* @param1 Object
* {
*   url: '请求地址',
*   type: 'get/post', 默认get
*   dataType: '返回数据的类型', string/json 默认string
*   async: true/false 是否异步 默认异步true
*   success: function() {} 成功回调
*   error: function() {} 失败回调
* }
* @param2 Boolean
* 是否允许跨域传递cookie
*
*
* */

export function ajax (data, cookieBoolean) {
  let xhr = null;
  let type = data.type || 'get'; // 类型
  let async = data.async || true; // 异步
  let url = data.url; // 地址
  let dataType = data.dataType || 'string'; // 返回数据的数据类型
  /* eslint-disable no-unused-vars */
  let queryString = ''; // 数据字符串
  let sendData = null; // post发送的数据
  let queryArr = [];
  if (data.data && typeof data.data === 'object') {
    Object.keys(data.data).forEach((attr) => {
      queryArr[queryArr.length] = attr + '=' + data.data[attr];
    });
    queryString = queryArr.join('&');
    if (type === 'get') {
      // url是否带有'?参数'
      queryString = url.lastIndexOf('?') === -1 ? '?' + queryString : '&' + queryString;
      url += queryString;
    }
  }

  try {
    xhr = new XMLHttpRequest();
  } catch (e) {
    /* eslint-disable no-undef */
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
  }

  if (cookieBoolean) {
    xhr.withCredentials = true;
  }
  xhr.open(type, url, async);

  xhr.onreadystatechange = function () {
    if (this.readyState !== 4) { // 前台能否使用后台返回的数据
      // 不能用
      return false;
    }
    // 能用
    if (this.status === 200) { // 成功
      let returnData = dataType === 'string' ? this.responseText : JSON.parse(this.responseText);
      if (data.success && typeof data.success === 'function') {
        data.success(returnData);
      }
      return false;
    }
    // 失败
    if (data.error && typeof data.error === 'function') {
      data.success(xhr);
    }
  }

  if (type === 'post') {
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    sendData = queryString;
  }

  xhr.send(sendData);
}

// 组件跳转授权
export function componentAuth () {
  let index = this.$layer.open({
    content: '登录信息失效，页面将在3s后跳转'
  });
  setTimeout(() => {
    this.$http.jsonp(this.domain + 'api/cashauth/wx_oauth2', {
      params: {
        returnurl: encodeURIComponent('//www.2qb.com/cashout')
      }
    })
      .then((response) => {
        if (response.data.status === 1) { // 成功获取后台跳转微信授权地址
          this.$layer.close(index);
          window.location.href = response.data.result.url;
          return false;
        }
        // 打印错误信息
        this.$layer.open({
          content: response.data.msg,
          skin: 'msg',
          time: 3
        });
      }, () => {
        this.$layer.open({
          content: '请求失败，请检查网络是否正常',
          skin: 'msg',
          time: 3
        });
      });
  }, 3000);
}
